﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace SST_DA
{
    public class RolDA
    {
        public static bool RevisarPermiso(string usuario, string permiso)  
        {
            const string query = "SELECT COUNT(r.NombreRol) as Permiso FROM RolInformatico as ri INNER JOIN Rol as r "+
                                " ON ri.RolID=r.RolID INNER JOIN Informatico as i ON ri.InformaticoID=i.InformaticoID "+
                                " WHERE r.NombreRol=@Permiso AND i.NombreCompleto=@Usuario";
            DataTable data = BaseDatos.ExecuteQuery(query, new string[] {"@Permiso", "@Usuario"}, new object[] {permiso ,usuario});
            for(int i = 0; i < data.Rows.Count; i++){
                if(int.Parse(data.Rows[i].ItemArray[0].ToString()) == 1)
                    return true;                
            }//for(int i = 0; i < data.Rows.Count; i++){
            return false;
        }//public static bool RevisarPermiso(string usuario, string permiso) { 

        public static Rol[] ListarRoles() {
            const string query = "SELECT r.RolID, r.NombreRol, r.FechaBorrado FROM Rol as r WHERE r.FechaBorrado IS NULL";

            DataTable resultado = BaseDatos.ExecuteQuery(query, new string[] { }, new object[] { });

            if (resultado == null)
            {
                return null;
            }

            int CantidadRoles = resultado.Rows.Count;
            Rol[] roles = new Rol[CantidadRoles];
            for (int i = 0; i < CantidadRoles; i++)
            {
                roles[i] = new Rol(int.Parse(resultado.Rows[i].ItemArray[0].ToString()),
                                            resultado.Rows[i].ItemArray[1].ToString());
            }

            return roles;
        }//public static Rol[] ListarRoles() { 


        public static bool AgregarRol(Rol r) {
            const string query = "INSERT INTO Rol(NombreRol) VALUES(@Nombre)";
            int FilasAfectadas = BaseDatos.ExecuteNonQuery(query, new string[] { "@nombre"}, new object[] { r.NombreRol });
            if (FilasAfectadas == 0)
                return false;
            return true;
        }//public static bool AgregarRol(Rol r) { 


        public static bool EditarRol(Rol r)
        {
            const string query = "UPDATE Rol SET NombreRol = @nombre WHERE RolID= @id";
            int FilasAfectadas = BaseDatos.ExecuteNonQuery(query, new string[] { "@nombre", "@id" }, new object[] { r.NombreRol, r.RolID });
            if (FilasAfectadas == 0)
                return false;
            return true;
        }//public static bool EditarRol(Rol r)

        public static bool EliminarRol(int id)
        {
            const string query = "UPDATE Rol SET FechaBorrado=GETDATE() WHERE RolID=@id";
            int FilasAfectadas = BaseDatos.ExecuteNonQuery(query, new string[] { "@id" }, new object[] { id });
            if (FilasAfectadas == 0)
            {
                return false;
            }
            return true;
        }

        public static void RevisarRoles() {
            const string query = "SELECT COUNT(r.NombreRol) as CuentaDeRoles FROM Rol as r WHERE r.NombreRol = 'Administrador' OR r.NombreRol = 'Personal de Soporte' OR r.NombreRol = 'Operario'";
            DataTable data = BaseDatos.ExecuteQuery(query, new string[] {}, new object[] {});
            bool IntegridadDeDatos = false;
            for (int i = 0; i < data.Rows.Count; i++ )
            {
                if (int.Parse(data.Rows[1].ItemArray[0].ToString()) == 3)
                    IntegridadDeDatos = true;                
            }//for (int i = 0; i < data.Rows.Count; i++ )
            if(!IntegridadDeDatos){
                const string RestoreQuery = "DECLARE @Administrator INT = (SELECT COUNT(NombreRol) FROM Rol WHERE NombreRol = 'Administrador')"+
                                            "IF(@Administrator < 1) BEGIN  INSERT INTO Rol(NombreRol) VALUES('Admnistrador') END"+
                                            "DECLARE @Soporte INT = (SELECT COUNT(NombreRol) FROM Rol WHERE NombreRol = 'Personal de Soporte')"+
                                            "IF(@Soporte < 1) BEGIN  INSERT INTO Rol(NombreRol) VALUES('Personal de Soporte') END"+
                                            "DECLARE @Operario INT = (SELECT COUNT(NombreRol) FROM Rol WHERE NombreRol = 'Operario')"+
                                            "IF(@Operario < 1) BEGIN  INSERT INTO Rol(NombreRol) VALUES('Operario') END";
                BaseDatos.ExecuteNonQuery(RestoreQuery, new string[] { }, new object[] { });
            }//if(!IntegridadDeDatos){
        }//public static void RevisarRoles() { 
    }//class RolDA
}//namespace SST_DA